package done.easy_601_700;

import com.study.common.TreeNode;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import static java.lang.Integer.MAX_VALUE;

/**
 * 671. Second Minimum Node In a Binary Tree. 二叉树中第二小的节点
 * <p>
 * 给定一个非空特殊的二叉树，每个节点都是正数，并且每个节点的子节点数量只
 * 能为 2 或 0。如果一个节点有两个子节点的话，那么这个节点的值不大于它的
 * 子节点的值。
 * 给出这样的一个二叉树，你需要输出所有节点中的第二小的值。如果第二小的值
 * 不存在的话，输出 -1 。
 * <p>
 * 示例 1:
 * 输入:
 * 2
 * / \
 * 2   5
 * / \
 * 5   7
 * <p>
 * 输出: 5
 * 说明: 最小的值是 2 ，第二小的值是 5 。
 *
 * @author 大硕
 * 2019-03-31 7:37 AM
 **/
@Slf4j
public class SecondMinimumNodeInABinaryTree {

    private int min = MAX_VALUE;
    private int seMin = min;

    @SuppressWarnings("all")
    public int findSecondMinimumValue(TreeNode root) {
        // 190331 first
        return -1;
    }

    @Test
    public void test() {
        TreeNode root = new TreeNode(2,
                new TreeNode(2,
                        5, 7), 5);
        log.info("{}", findSecondMinimumValue(root));
    }
}




























/*
public int findSecondMinimumValue(TreeNode root) {

    traverse(root);

    // 因为所有元素都大于0，所以最小的值是0，第二小的充其量也就是 -1 了
    if (min == seMin || seMin + 1 < 0) {
        return -1;
    } else {
        return seMin;
    }
}

private void traverse(TreeNode root) {
    if (root == null) {
        return;
    }

    if (root.val < min) {
        min = root.val;
     } else if (root.val < seMin
             && root.val > min) {
        seMin = root.val;
    }

    traverse(root.left);

    traverse(root.right);
}
*/
